/**
 * 权限指令
 * 用于根据用户权限控制UI元素的显示
 * 使用方式：v-permission="'system:role:add'" 或 v-permission="['system:role:add', 'system:role:edit']"
 */
import axios from 'axios';
import { nextTick } from 'vue';

// 存储用户权限列表
let userPermissions = [];

// 获取用户权限列表
const getUserPermissions = async () => {
  if (userPermissions.length > 0) {
    return userPermissions;
  }
  
  try {
    const response = await axios.get('/api/admin/permissions');
    if (response.data.code === 200) {
      userPermissions = response.data.data || [];
    }
    return userPermissions;
  } catch (error) {
    console.error('获取用户权限失败:', error);
    return [];
  }
};

// 检查用户是否有权限
const hasPermission = (permission) => {
  if (!permission) return true;
  
  // 如果是超级管理员，拥有所有权限
  if (userPermissions.includes('*')) {
    return true;
  }
  
  // 如果是数组，检查是否有其中一个权限
  if (Array.isArray(permission)) {
    return permission.some(p => userPermissions.includes(p));
  }
  
  // 字符串权限直接检查
  return userPermissions.includes(permission);
};

// 清除权限缓存
export const clearPermissionCache = () => {
  userPermissions = [];
};

// 权限指令
const permission = {
  async mounted(el, binding) {
    const permissions = await getUserPermissions();
    const value = binding.value;
    
    if (!hasPermission(value)) {
      // 如果没有权限，从DOM中移除元素
      el.parentNode && el.parentNode.removeChild(el);
    }
  },
  async updated(el, binding) {
    const permissions = await getUserPermissions();
    const value = binding.value;
    
    if (!hasPermission(value)) {
      // 如果没有权限，从DOM中移除元素
      el.parentNode && el.parentNode.removeChild(el);
    }
  }
};

export default {
  install(app) {
    app.directive('permission', permission);
  }
};